Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by www.netzwerkartist.de...

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Exceptions
8 Die Funktionsbibliothek
9 Threads und nebenläufige Programmierung
10 Raum und Zeit
11 Datenstrukturen und Algorithmen
12 Dateien und Datenströme
13 Die eXtensible Markup Language (XML)
14 Grafische Oberflächen mit Swing
15 Grafikprogrammierung
16 Das Netz
17 JavaServer Pages und Servlets
18 Verteilte Programmierung mit RMI und Web–Services
19 Applets, Midlets und Sound
20 Datenbankmanagement mit JDBC
21 Reflection und Annotationen
22 Komponenten durch Bohnen
23 Logging und Monitoring
24 Sicherheitskonzepte
25 Java Native Interface (JNI)
26 Dienstprogramme für die Java-Umgebung
A Die Begleit-DVD
Index

Download:
- ZIP, ca. 12,5 MB
Buch bestellen

Website zum Buch
Weblog des Autors
Ihre Meinung?

Spacer
 <<   zurück
Java ist auch eine Insel von Christian Ullenboom
Programmieren mit der Java Standard Edition Version 6
Buch: Java ist auch eine Insel

Java ist auch eine Insel
6., akt. und erw. Aufl., mit DVD
1.454 S., 49,90 Euro
Galileo Computing
ISBN 3-89842-838-9
gp 4 Der Umgang mit Zeichenketten
  gp 4.1 Einzelne Zeichen mit der Character-Klasse behandeln
  gp 4.2 Strings und deren Anwendung
    gp 4.2.1 String-Literale als String-Objekte für konstante Zeichenketten
    gp 4.2.2 String-Länge und Test auf Leerstring
    gp 4.2.3 Nach enthaltenen Zeichen und Zeichenfolgen suchen
    gp 4.2.4 Gut, dass wir verglichen haben
    gp 4.2.5 String-Teile extrahieren
    gp 4.2.6 Strings anhängen, Groß-/Kleinschreibung und Leerraum
    gp 4.2.7 Suchen und ersetzen
    gp 4.2.8 String-Objekte mit Konstruktoren neu anlegen
  gp 4.3 Konvertieren zwischen Primitiven und Strings
    gp 4.3.1 Unterschiedliche Typen in Zeichenketten konvertieren
    gp 4.3.2 String in primitives Element konvertieren
  gp 4.4 Veränderbare Zeichenketten mit StringBuffer/StringBuilder
    gp 4.4.1 Anlegen von StringBuffer/StringBuilder-Objekten
    gp 4.4.2 Länge eines StringBuffer/-Builder-Objekts lesen und setzen
    gp 4.4.3 Daten anhängen
    gp 4.4.4 Zeichen(folgen) setzen, erfragen, löschen und umdrehen
    gp 4.4.5 Vergleichen von String/StringBuffer/StringBuilder
    gp 4.4.6 hashCode() bei StringBuffer/StringBuilder
  gp 4.5 Sprachabhängiges Vergleichen mit der Collator-Klasse
    gp 4.5.1 Die Klasse Collator
    gp 4.5.2 Effiziente interne Speicherung für die Sortierung
  gp 4.6 Reguläre Ausdrücke
    gp 4.6.1 Die Klassen Pattern und Matcher
    gp 4.6.2 Mit MatchResult alle Ergebnisse einsammeln
  gp 4.7 Zerlegen von Zeichenketten
    gp 4.7.1 Splitten von Zeichenketten mit split()
    gp 4.7.2 split() in Pattern
    gp 4.7.3 Die Klasse Scanner
    gp 4.7.4 StringTokenizer
    gp 4.7.5 BreakIterator als Zeichen-, Wort-, Zeilen- und Satztrenner
  gp 4.8 Zeichenkodierungen und Base64
    gp 4.8.1 Über die Klasse String Kodierungen vornehmen
    gp 4.8.2 Konvertieren mit OutputStreamWriter-Klassen
    gp 4.8.3 Das Paket java.nio.charset
    gp 4.8.4 Base64-Kodierung
  gp 4.9 Formatieren von Ausgaben
    gp 4.9.1 Formatieren mit format() aus String
    gp 4.9.2 Die Format-Klassen im Überblick
    gp 4.9.3 Zahlen, Prozente und Währungen mit NumberFormat und DecimalFormat formatieren
    gp 4.9.4 Ausgaben mit MessageFormat formatieren
  gp 4.10 Zum Weiterlesen


Galileo Computing

4.5 Sprachabhängiges Vergleichen mit der Collator-Klasse  downtop

Für die deutsche Sprache gilt, dass »ä« zwischen »a« und »b« äquivalent zu »ae« einsortiert wird und nicht so, wie Unicode das Zeichen einordnet: hinter dem »z«. Ähnliches gilt für das »ß«. Auch das Spanische hat seine Besonderheiten im Alphabet. Hier gelten das »ch« und das »ll« als einzelner Buchstabe, die passend einsortiert werden müssen.

Damit Java für alle Landessprachen die String-Vergleiche korrekt durchführen kann, bietet die Bibliothek Collator-Klassen.


Galileo Computing

4.5.1 Die Klasse Collator  downtop

Mit den java.text.Collator-Objekten ist es möglich, Zeichenketten nach jeweils landesüblichen Kriterien zu vergleichen. So werden die Sprachbesonderheiten jedes Landes beachtet. Ein Collator-Objekt wird vor seiner Benutzung mit getInstance() erzeugt.


Beispiel Das »Ä« liegt zwischen »A« und »B«:

Listing 4.3    CollatorDemo.java

Collator col = Collator.getInstance(); 
System.out.println( col.compare( "Armleuchter", "Ätsch" ) ); // -1 
System.out.println( col.compare( "Ätsch", "Bätsch" ) );      // -1

Die Fabrikmethode getInstance() nimmt optional einen Ländercode als Locale-Objekt an. Explizit setzt getInstance(Locale.GERMAN) das Vergleichsverfahren für deutsche Zeichenketten; die Länderbezeichnung ist in diesem Fall eine Konstante der Locale-Klasse. Standardmäßig nutzt getInstance() die aktuelle Einstellung des Systems.


abstract class java.text.Collator 
implements Comparator<Object>, Cloneable

  • static Collator getInstance() Liefert einen Collator für die aktuelle Landessprache.
  • static Collator getInstance( Locale desiredLocale ) Liefert einen Collator für die gewünschte Sprache.
  • abstract int compare( String source, String target ) Vergleicht die beiden Zeichenketten auf ihre Ordnung. Der Rückgabewert ist entweder <0, 0 oder >0.
  • int compare( Object o1, Object o2 ) Vergleicht die beiden Argumente auf ihre Ordnung. Ruft compare((String)o1, (String)o2) auf.

Vergleichsarten

Die Collator-Klasse besitzt sinnvolle Methoden, die über die Vergleichsfunktionalität der String- und StringBuffer/StringBuilder-Klasse hinausgehen. So ist es über die Funktion setStrength() möglich, unterschiedliche Vergleichsarten einzustellen. Die Collator-Klasse deklariert vier Strenge-Konstanten:

  • PRIMARY. Erkennt Unterschiede im Grundzeichen, sodass »a« kleiner »b« ist. Es gibt keine Unterschiede durch Akzente und Umlaute, so dass »a«, »ä« und »á« gleich sind.
  • SECONDARY. Erkennt Zeichen mit Akzenten. So sind »a« und »á« nicht mehr gleich wie bei PRIMARY.
  • TERTIARY. Unterscheidet in der Groß- und Kleinschreibung; bei PRIMARY und SECONDARY die Schreibweise egal, und da war »a« gleich »A«.
  • IDENTICAL. Wirklich alle Unicode-Zeichen sind anders. Waren unter den ersten drei Konstanten die Buchstaben '\u0004' und '\u0006' gleich, sind sie unter IDENTICAL wirklich unterschiedlich.

Was die einzelnen Werte für jede Sprache bedeuten, beschreibt der Unicode-Standard präzise. Beispielsweise erkennt der tolerante Vergleich »abc« und »ABC« als gleich. Ohne explizit gesetztes setStrength() ist der Standard TERTIARY.

Listing 4.4    CollatorStrengthDemo.java

import java.util.*; 
import java.text.*; 
 
class CollatorStrengthDemo 
{ 
  public static void comp( Collator col, String a, String b ) 
  { 
    if ( col.compare( a, b ) < 0 ) 
      System.out.println( a+" < "+b ); 
    if ( col.compare( a, b ) == 0 ) 
      System.out.println( a+" = "+b ); 
    if ( col.compare( a, b ) > 0 ) 
      System.out.println( a+" > "+b ); 
  } 
 
  public static void main( String[] args ) 
  { 
    Collator col = Collator.getInstance( Locale.GERMAN ); 
    System.out.println( "Strength = PRIMARY" ); 
    col.setStrength( Collator.PRIMARY ); 
    comp( col, "abc", "ABC" ); 
    comp( col, "Quäken", "Quaken" ); 
    comp( col, "boß", "boss" ); 
    comp( col, "boß", "boxen" ); 
 
    System.out.println( "\nStrength =  SECONDARY" ); 
    col.setStrength( Collator.SECONDARY ); 
    comp( col, "abc", "ABC" ); 
    comp( col, "Quäken", "Quaken" ); 
    comp( col, "boß", "boss" ); 
    comp( col, "boß", "boxen" ); 
 
    System.out.println( "\nStrength =  TERTIARY" ); 
//    col.setStrength( Collator.TERTIARY );              // Standard 
    comp( col, "abc", "ABC" ); 
    comp( col, "Quäken", "Quaken" ); 
    comp( col, "boß", "boss" ); 
    comp( col, "boß", "boxen" ); 
  } 
}

Die Ausgabe ist folgende:

Strength = PRIMARY 
abc = ABC 
Quäken = Quaken 
boß = boss 
boß < boxen 
Strength =  SECONDARY 
abc = ABC 
Quäken > Quaken 
boß = boss 
boß < boxen 
Strength =  TERTIARY 
abc < ABC 
Quäken > Quaken 
boß > boss 
boß < boxen

Galileo Computing

4.5.2 Effiziente interne Speicherung für die Sortierung  toptop

Obwohl sich mit der Collator-Klasse sprachspezifische Vergleiche korrekt umsetzen lassen, ist die Geschwindigkeit gegenüber einem normalen String-Vergleich geringer. Daher bietet die Collator-Klasse die Objektmethode getCollationKey() an, die ein CollationKey-Objekt liefert, das schnellere Vergleiche zulässt.

Collator col = Collator.getInstance( Locale.GERMAN ); 
CollationKey key1 = col.getCollationKey( "ätzend" ); 
CollationKey key2 = col.getCollationKey( "Bremsspur" );

Durch CollationKeys lässt sich die Performance bei Vergleichen zusätzlich verbessern, da der landesspezifische String in einen dazu passenden, normalen Java-String umgewandelt wird, der dann schneller gemäß der internen Unicode-Zeichenkodierung verglichen werden kann. Dies bietet sich zum Beispiel beim Sortieren einer Tabelle an, wo mehrere Vergleiche mit dem gleichen String durchgeführt werden müssen. Der Vergleich wird mit compareTo(Collation-Key) durchgeführt.


Beispiel Der Vergleich von key1 und key2 lässt sich durch folgende Zeile ausdrücken:
int comp = key2.compareTo( key1 );

Das Ergebnis ist wie bei der compare()-Methode bei Collator-Objekten entweder <0, 0 oder >0.



final class java.text.CollationKey 
implements Comparable<CollationKey>

  • int compareTo( CollationKey target ) Vergleicht zwei CollationKey-Objekte miteinander.
  • int compareTo( Object o ) Vergleicht den aktuellen CollationKey mit dem angegebenen Objekt. Ruft lediglich compareTo((CollationKey)o) auf.
  • byte[] toByteArray() Konvertiert den CollationKey in eine Folge von Bytes.
  • boolean equals( Object target ) Testet die beiden CollationKey-Objekte auf Gleichheit.
  • String getSourceString() Liefert den String zum CollationKey.
  • int hashCode() Berechnet den Hashcode für den CollationKey.

abstract class java.text.Collator 
implements Comparator<Object>, Cloneable

  • abstract CollationKey getCollationKey( String source ) Liefert einen CollationKey für den konkreten String.


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.





 <<   zurück



Copyright © Galileo Press 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de